﻿using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 小鸟控制器
public class BirdControl : MonoBehaviour {

    // 刚体

    Rigidbody2D rigidbody2;

    //    通过ui拖拽获取的组件的方法1
    //    [SerializeField]
    //    private Rigidbody2D rigidbody2;

    //    通过ui拖拽获取的组件的方法2
    //    public Rigidbody2D rigidbody2;

    // 碰撞器
    Collider2D collider2;

    // 动画控制器
    Animator animator;

    // 飞行力度

    public float jumpPower;

    // 死亡flag

    private bool isDead = false;

    // 会杀死小鸟的敌人名称
    String[] enemies = new String[2] {
        "wall",
        "floor"
    };

    // 初始化函数
    void Start () {

        // 使脚本获取对象上的组件(GetComponent此方法消耗性能，想节省内存开销不推荐)
        this.rigidbody2 = this.gameObject.GetComponent<Rigidbody2D> ();
        // this可以省略
        collider2 = this.gameObject.GetComponent<Collider2D> ();
        animator = gameObject.GetComponent<Animator> ();

    }

    // 每帧更新的函数
    void Update () {

        // 肯定是没有死的时候才能执行
        if (isDead == false) {
            if (Input.GetMouseButtonDown (0)) {
                // 鼠标左键发生点下去的事件
                // 先将刚体上的向量释放（不然下落的加速方向还在）
                rigidbody2.velocity = Vector2.zero; // Vector2.zero = new Vcetor2(0,0);
                // 给刚体施加力
                rigidbody2.AddForce (new Vector2 (0, jumpPower));
                // 豆知识
                // (如果不用刚体，位置的更新得遵循此自由落体公式，老师在没学unity用c++编程得时候用过)
                // h=v0t-gt²/2
                // h (当前高度) 
                // v0 初速度
                // t时间
                // g重力加速度 一般选9.8(不是现实世界可随意)
                // 既 this.transform.position.y = jumpPower*Time.deltaTime - 9.8*Time.deltaTime*Time.deltaTime/2 (大致要封装这个函数得样子)
                // unity的物理替我们实现了
            }
        }
    }

    // 与其他物体碰撞发生时
    void OnCollisionEnter2D (Collision2D other) {

        if (other.gameObject.name.Contains (enemies[0]) || other.gameObject.name.Contains (enemies[1])) {

            // 判定其为死亡
            this.isDead = true;

            GameControl.instance.BirdDied();
            //播放死亡动画
            this.animator.SetTrigger ("dead");
        }
    }

    // 触发得分判定
    void OnTriggerEnter2D(Collider2D other) {

        // 小鸟触碰ScoreTrigger游戏对象时
        if (other.gameObject.name.Equals("ScoreTrigger")) {

            GameControl.instance.BirdScored();
        }
    }
}